Event-driven distributed infrastructures are becoming increasingly important and span middleware technologies such as content-based publish/subscribe, stream processing overlays, and Enterprise Service Bus (ESB) architectures. Data messages are automatically generated at producer sites in response to trigger events and are delivered to consumers. Examples of trigger events include breaking news which leads to increased consumer demand, changes in data values (e.g., stock prices reaching preset thresholds), expiration of periodic time intervals (e.g., hourly updates), or the like.
An example of event-driven messaging is delivery of trade data whereby an application produces messages corresponding to each trade in the stock market for a certain market segment. Typically there are two kinds of consumers interested in this data: (1) consumers at one or more brokerage firms, called gold consumers, which pay for the data, and (2) public consumers connected over the Internet. The gold consumers have a higher priority since, as paying consumers, they bring more benefit to the system. Generally a consumer will attach to a node in the system to receive messages of interest. Before messages are provided to public consumers, the messages are altered within the system to remove fields which are to be made available only to gold consumers. In addition, gold consumers pay for and expect reliable delivery, which places extra overhead (e.g., for exchanges of acknowledgements) on the system. The message flow needs to be delivered with low latency, and therefore, is not very elastic in terms of rate, (i.e., the rate cannot be decreased to tolerate delays).
Another example of event-driven messaging comprises delivery of latest price data whereby an application produces messages representing the latest prices of a stock. Public consumers connected to the system receive price messages which satisfy a consumer-specified filter (e.g., price>$80). That is, for each price message, the system evaluates the filter to determine whether the message should be delivered to the consumer. The message flow is very elastic, since rate can be decreased (and latency increased) by reducing the frequency of updates.
The common theme across the messaging technologies is support for asynchronous, loosely-coupled data delivery, including transformations which may alter messages as they flow from producers to consumers. Examples of message transformation include altering based on content, format changes for integrating legacy applications, augmenting messages with content retrieved from databases, and aggregating multiple messages to produce a more concise stream. Message content may be altered based on the consumer class for which the message is intended. Consumers in a “gold” class may subscribe to a premium service to receive messages having more data than is found in messages intended for general consumption.
The messaging infrastructures, which support message routing, message transformation, and consumer admission, must be able to support applications having heterogeneous sets of requirements. For instance, an ESB seeks to integrate all applications within an enterprise including federations of applications across partner enterprises.
Resources, like CPU and network bandwidth, are consumed by both message flows and message consumers. In the above scenarios, system resources are consumed both on a “per message” basis, independent of the number of consumers, and on a “per message, per consumer” basis. The cost of the latter can vary depending on the complexity of the “per consumer” processing, like content filtering, reliable delivery, etc. Further, the workloads placed on an event-driven distributed infrastructure (referred to as “the system” hereinafter) can be unpredictable and bursty, because communication is typically triggered by real world events.
In the presence of significant workload fluctuations, over-provisioning resources to meet peak load requirements is not desirable since it has significant cost in terms of hardware, space, power and human resources. Rather, it is preferable to dynamically allocate existing resources. Optimization of resource utilization should involve both rate control for controlling message flows and admission control for controlling the numbers of consumers at various service levels, with tradeoffs between adjusting the rate of messages and admitting consumers to the messaging system.
It is therefore an object of the present invention to provide optimal resource allocation in an event-driven infrastructure comprising an overlay of computing nodes.
Another object of the invention is to provide rate control along with admission control, performing tradeoffs between adjusting the flow rate for messages and adjusting the admissions of consumers.
Yet another object is to provide a distributed solution enabling the nodes of the system to collaboratively optimize aggregate system performance in a self-optimization scheme that is applicable to an autonomic event-driven infrastructure.